Using a ListView Control to Select Trends to Display

Multiple trends can be viewed on a Trend Tool simultaneously. This functionality can allow the user to dynamically select one or more trends to view, if script is provided to do so. Several list controls could be used in this situation to display the set of values to trend, including a List Box, a set of Check Buttons, or any ActiveX list control.

The following example uses a Microsoft ListView Control (ActiveX) to take advantage of its option to show check boxes next to list items. It is assumed that the Site/Service and Facility are configured at the View level.

Using a ListView Control (ActiveX) to enable Display of Single or Multiple Trends

  1. Create a new Studio screen.
  2. Place a ListView control on the screen.
  1. Click the ActiveX tool ActiveX tool on the Standard Tools palette.
  2. Click and drag the outline of the list box on the screen. When the mouse button is released, an Insert OLE Control dialog box appears.
  3. In the dialog box, select Microsoft ListView Control.  The version number may be included in the name.
  4. Right-click the control to open its properties. In the (ObjectCode) field, type "listControl."
  1. Place a Trend control on the screen.
  1. Click the Trend *Trend button on the Standard Tools palette.
  2. Click and drag the outline of the Trend control on the screen.
  3. Right-click the control to open its properties. In the (ObjectCode) field, type "trendControl."
  1. Add general declarations.
  1. Open the Script Editor and navigate to (General), (Declarations).
  2. Enter the following script. Note that trend series are stored in a two dimensional array, where for each series, the list item, long point ID, and UDC, and axis number are stored in that order.
Copy
Declarations
'(Declarations)
 
    'Set up trend colors
    Dim trendColors(3)
    trendColors(0) = vbRed
    trendColors(1) = vbBlue
    trendColors(2) = vbGreen
     
    'Initialize trend series array
    Dim SeriesArray(3,3)
     
    'Method to add a series to the array and trend control
    Sub AddTrendSeries(longPointID, axisNum, listItem, udc)
        SeriesArray(axisNum, 0) = listItem
        SeriesArray(axisNum, 1) = longPointID
        SeriesArray(axisNum, 2) = udc
        SeriesArray(axisNum, 3) = axisNum
         
        'Update trend control
        With trendControl
            .SiteService(axisNum) = TheView.SiteService
            .FacilityId(axisNum) = TheView.Facility
            .Udc(axisNum) = udc
            .AutoScale(axisNum) = True
            .OverlayYAxis(axisNum) = False
            .PointIdLong(axisNum) = longPointID
            .XAxisLabel = "Time"
            .SeriesColor(axisNum) = trendColors(axisNum)
            .LineType = 9 "Medium Thin Solid
            .Restart()
        End With
    End Sub
 
'End of (Declarations)
  1. Add initialization script to the ListView Control.
  1. In the Script Editor, navigate to the listControl EventInitialize event.
  2. Enter the following script. Successive columns are defined as sub items of the first column. The second column (UDC) is used to store the UDC value for each item, and can be made invisible if desired.
Copy
Add initialization
Sub listControl_EventInitialize()
    Dim This : Set This = listControl
    This.Checkboxes = True
    This.View = 3 'Report view
     
    'Add columns
    This.ColumnHeaders.Add , , "Choose one or more items to trend"
    This.ColumnHeaders.Add , , "UDC"
     
    'Add descriptions in first column (changes these descriptions to match your application)
    With This.ListItems
        .Add , , "Vol Gas Today"
        .Add , , "Vol Gas Yest"
        .Add , , "Gas Rate"
    End With
     
    'Add UDCs in second column (change to match your application)
    With This
        .ListItems(1).SubItems(1) = "VGT"
        .ListItems(2).SubItems(1) = "VGY"
        .ListItems(3).SubItems(1) = "RGAS"
    End With
End Sub
  1. Click OK to close the script editor.
  1. Add script to run when a user checks or unchecks an item in the ListView.
  1. Still in the Script Editor, navigate to the listControl EventItemCheck event.
  2. Enter the following script. This event has one parameter, Item, the list item that called the event after being checked or unchecked.
Copy
Event Item Check
Sub listControl_EventItemCheck(Item)
Dim This : Set This = listControl
    If Item.Checked = True Then
        longPointID = TheView.Facility & "_" & Item.SubItems
        For i = 0 To ubound(SeriesArray)
            If SeriesArray(i, 0) = "" Then 'Fill in first empty spot
                AddTrendSeries LongPointID, i, Item, Item.SubItems(1)
                Exit For
            End If
        Next
    Else 'Remove from series array
        For i = 0 To ubound(SeriesArray)
            If SeriesArray(i, 0) = Item Then
                trendControl.DeleteSeries(SeriesArray(i, 3))
                SeriesArray(i, 0) = ""
                SeriesArray(i, 1) = ""
                SeriesArray(i, 2) = ""
                SeriesArray(i, 3) = ""
                Exit For
            End If
        Next
        ReIndexSeriesArray
    End if
End Sub
  1. Save the screen and switch to Run mode. Assuming that sufficient data values exist for the given UDCs, try turning series trends on and off to see the Trend control updated accordingly.

Back to top